package com.example.mapper;

import com.example.model.BookInfo;
import com.example.model.PageRequest;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 图书信息Mapper接口
 */
@Mapper  // 标识这是MyBatis的Mapper接口，Spring Boot启动时会自动扫描并创建代理对象
public interface BookInfoMapper {

    /**
     * 插入图书信息
     * @param bookInfo 图书信息
     * @return 影响的行数
     */
    @Insert("insert into book_info (book_name, author, count, price, publish, status) " +
            "values (#{bookName}, #{author}, #{count}, #{price}, #{publish}, #{status})")
    Integer insertBook(BookInfo bookInfo);  // 使用#{ }占位符，MyBatis会自动从bookInfo对象获取对应属性值


    /**
     * 统计图书总数（排除已删除的图书）
     * @return 图书总数
     */
    @Select("select count(1) from book_info where status<>0")
    Integer count();

    /**
     * 分页查询图书列表
     * @param pageRequest 分页参数（包含offset和pageSize）
     * @return 图书列表
     */
    @Select("select * from book_info where status !=0 order by id desc limit #{offset}, #{pageSize}")
    List<BookInfo> queryBookListByPage(PageRequest pageRequest);

    @Select("select id, book_name, author, count, price, publish, `status`, create_time, update_time " +
            "from book_info where id=#{bookId} and status<>0")
    BookInfo queryBookById(Integer bookId);
    /**
     * 更新图书信息
     * @param bookInfo 图书信息
     * @return 影响的行数
     */
    Integer updateBook(BookInfo bookInfo);


    /**
     * 批量删除图书
     * @param ids 图书ID列表
     */
    void batchDeleteBook(List<Integer> ids);
}